﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;


namespace TackMessenger
{
    class Encryption
    {
        Hashtable charTable;

        public Encryption()
        {
            charTable = new Hashtable();
            fillTable();
        }

        private void fillTable()
        {
            for (char a = 'a'; a < 'z'; a++)
            {
                charTable.Add(a.GetHashCode(), a);
            }
            for (char a = 'A'; a < 'Z'; a++)
            {
                charTable.Add(a.GetHashCode(), a);
            }

            charTable.Add(' '.GetHashCode(), ' ');
            charTable.Add('1'.GetHashCode(), '1');
            charTable.Add('2'.GetHashCode(), '2');
            charTable.Add('3'.GetHashCode(), '3');
            charTable.Add('4'.GetHashCode(), '4');
            charTable.Add('5'.GetHashCode(), '5');
            charTable.Add('6'.GetHashCode(), '6');
            charTable.Add('7'.GetHashCode(), '7');
            charTable.Add('8'.GetHashCode(), '8');
            charTable.Add('9'.GetHashCode(), '9');
            charTable.Add('0'.GetHashCode(), '0');
            charTable.Add(','.GetHashCode(), ',');
            charTable.Add('.'.GetHashCode(), '.');
            charTable.Add('-'.GetHashCode(), '-');
            charTable.Add('_'.GetHashCode(), '_');
            charTable.Add('?'.GetHashCode(), '?');
            charTable.Add(':'.GetHashCode(), ':');
            charTable.Add(';'.GetHashCode(), ';');
            charTable.Add('>'.GetHashCode(), '>');
            charTable.Add('<'.GetHashCode(), '<');
            charTable.Add('*'.GetHashCode(), '*');
            charTable.Add('\''.GetHashCode(), '\'');
            charTable.Add('"'.GetHashCode(), '"');
            charTable.Add('+'.GetHashCode(), '+');
            charTable.Add('!'.GetHashCode(), '!');
            charTable.Add('%'.GetHashCode(), '%');
            charTable.Add('/'.GetHashCode(), '/');
            charTable.Add('='.GetHashCode(), '=');
            charTable.Add('('.GetHashCode(), '(');
            charTable.Add(')'.GetHashCode(), ')');
            charTable.Add('\\'.GetHashCode(), '\\');
            charTable.Add('|'.GetHashCode(), '|');
            charTable.Add('#'.GetHashCode(), '#');
            charTable.Add('&'.GetHashCode(), '&');
            charTable.Add('@'.GetHashCode(), '@');
            charTable.Add('{'.GetHashCode(), '{');
            charTable.Add('}'.GetHashCode(), '}');
            charTable.Add('['.GetHashCode(), '[');
            charTable.Add(']'.GetHashCode(), ']');
            charTable.Add('~'.GetHashCode(), '~');
            charTable.Add('^'.GetHashCode(), '^');
            charTable.Add('°'.GetHashCode(), '°');
        
        }

        public string encode(string text)
        {
            string encoded = "";
            int k;
            foreach (char i in text)
            {
                k = i.GetHashCode();
                k = 5 * (k * 2 - 25655) / 10; // 7 hosszú
                
                encoded += k.ToString();
            }

            return encoded;
        }

        public string decode(string text)
        {
            string decoded = "";
            int k = 0;
            string local;
            int backtrack;
            while (k < text.Length / 7) 
            {
                local = "";
                for (int i = 0; i < 7; ++i)
                {
                    local += text.ElementAt(k * 7 + i);
                }

                backtrack = (int)Math.Round((decimal)((10 * Convert.ToInt32(local) / 5) ) + 25655) /2 + 1;

                decoded += charTable[backtrack];
                k++;
            }
            

            return decoded;  
        }
    }
}
